package com.cdx.pma.logging;



import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Aspect
@Component
public class ApplicationLoggerAspect {

    private final Logger log =LoggerFactory.getLogger(this.getClass());

    @Pointcut("within(com.cdx.pma.controllers..*)"+"||within(com.cdx.pma.dao..*)")
    public void definePackagePointcuts(){

    }

   // @Before("definePackagePointcuts()")
   // public void logBefore (JoinPoint joinPoint){
     //   log.debug("\n\n\n");
     //   log.debug("************方法执行前*************");
     //   log.debug(
    //            "{},{},输入参数{}",
    //            joinPoint.getSignature().getDeclaringTypeName(),
    //            joinPoint.getSignature().getName(),
    //            Arrays.toString(joinPoint.getArgs())
    //    );
   //     log.debug("--------------------------");
   //     log.debug("\n\n\n");
  //  }
  //  @After("definePackagePointcuts()")
  //  public void logAfter (JoinPoint joinPoint){
   //  log.debug("\n\n\n");
    //    log.debug("***********方法执行后***********");
    //    log.debug(
    //            "{},{},输入参数{}",
     //           joinPoint.getSignature().getDeclaringTypeName(),
       //         joinPoint.getSignature().getName(),
     //           Arrays.toString(joinPoint.getArgs())
      //  );
     //   log.debug("--------------------------");
     //   log.debug("\n\n\n");

    @Around("definePackagePointcuts()")
    public Object logAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        log.debug("\n\n\n");
        log.debug("***********方法执行后***********");
        log.debug(
                "{},{},输入参数{}",
               proceedingJoinPoint.getSignature().getDeclaringTypeName(),
               proceedingJoinPoint.getSignature().getName(),
                Arrays.toString(proceedingJoinPoint.getArgs())
        );
        log.debug("--------------------------");
        log.debug("\n\n\n");

        Object object = proceedingJoinPoint.proceed();

        log.debug("\n\n\n");
        log.debug("***********方法执行后***********");
        log.debug(
                "{},{},输入参数{}",
                proceedingJoinPoint.getSignature().getDeclaringTypeName(),
                proceedingJoinPoint.getSignature().getName(),
                Arrays.toString(proceedingJoinPoint.getArgs())
        );
        log.debug("--------------------------");
        log.debug("\n\n\n");

        return object;

}
}
